package io.gitee.yaoshanli.engine.service;

import io.gitee.yaoshanli.engine.model.WfCodeModel;
import io.gitee.yaoshanli.engine.model.WfLinkModel;
import io.gitee.yaoshanli.engine.model.WfNodeModel;

import java.util.List;

/**
 * @author 姚善利
 * @classname org.jwflow.core
 * @description     基础工作流设置类
 * @date 2022/9/20 15:03
 */
public interface IFlowService {

    /**
     * 验证当前流程是否存在
     * @param wfCodeModel
     * @param idOrCode     guid 或者 code
     * @return
     */
    boolean checkFlow(WfCodeModel wfCodeModel, String idOrCode);

    /**
     * 获取工作流信息
     * @param idOrCode
     * @return
     */
    public WfCodeModel getWfCode(String idOrCode);
    /**
     * 彻底删除当前流程及相关的业务数据
     * @param idOrCode
     * @return
     */
    boolean removeAndTask(String idOrCode);

    /**
     * 获取所有流程列表信息，需要分页
     * @return
     */
    List<WfCodeModel> getWfCodePage();

    /**
     * 当前流程的第一个节点
     * @param wf_id
     * @return
     */
    public WfNodeModel getFirstNode(String wf_id);

    /**
     * 根据工作任务ID查找下一个节点
     * @param wf_id
     * @param task_id
     * @return
     */
    public WfNodeModel getNextNodeByTask(String wf_id, String task_id);

    /**
     * 根据当前节点查询下一个节点信息
     * @param wf_id
     * @param node_id
     * @return
     */
    public WfNodeModel getNextNode(String wf_id, String node_id);

    /**
     * 根据当前节点查询下一个节点信息
     * @param wf_id
     * @param node_id
     * @return
     */
    public List<WfNodeModel> getNextNodes(String wf_id, String node_id);
    /**
     * 当前流程的当前节点信息
     * @param wf_id
     * @param node_id
     * @return
     */
    public WfNodeModel getNode(String wf_id, String node_id);

    /**
     * 当前节点的前一个节点
     * @param wf_id
     * @param node_id
     * @return
     */
    public WfNodeModel getPrevNode(String wf_id, String node_id);

    /**
     * 当前节点前的所有处理节点
     * @param wf_id
     * @param node_id
     * @return
     */
    public List<WfNodeModel> getPrevNodes(String wf_id, String node_id);


    /**
     * 获取节点连接线
     * @param node_id
     * @return
     */
    public WfLinkModel getLink(String node_id);
}
